/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package arquivos;

import aula1.Cliente;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 *
 * @author leovirgilio
 */
public class TestaArquivoBinario {


    public static ObjectOutputStream CriaEscritorBinario(File arquivo) {
        ObjectOutputStream out = null;
        try {
            if (arquivo.exists()) {
                FileOutputStream fos = new FileOutputStream(arquivo, true);
                out = new ObjectOutputStream(fos) {

                    @Override
                    protected void writeStreamHeader() {
                        // do not write a header
                    }
                };
            } else {
                FileOutputStream fos = new FileOutputStream(arquivo, true);
                out = new ObjectOutputStream(fos);
            }
        } catch (IOException erro) {
            System.out.println("Erro ao criar arquivo. " + erro);
        }
        return out;
    }

    public static ObjectInputStream CriaLeitorBinario(File arquivo) {
        ObjectInputStream ois = null;
        try {
            FileInputStream fis = new FileInputStream(arquivo);
            ois = new ObjectInputStream(fis);
        } catch (IOException erro) {
            System.out.println("Erro ao ler arquivo. " + erro);
        }
        return ois;
    }

    public static void EscreveObjeto(ObjectOutputStream oos, Object obj, boolean flush) {
        try {
            oos.writeObject(obj);
            if (flush) {
                oos.flush();
            }
        } catch (IOException erro) {
            System.out.println("Erro na escrita. " + erro);
        }
    }

    public static Object LeObjeto(ObjectInputStream ois) {
        Object objlido = null;
        try {
            objlido = ois.readObject();
        } catch (ClassNotFoundException erro) {
            System.err.println("Classe nao encontrada. " + erro);
        } catch (EOFException erro) {
            System.err.println("Fim do arquivo. " + erro);
        } catch (IOException erro) {
            System.err.println("Erro na leitura do objeto. " + erro);
        }
        return objlido;
    }

    public static void imprimeCliente(Cliente cli) {
        if (cli != null) {
            System.out.println(cli.getNome()+" "+cli.getFone()+" "+cli.getIdade()+" "+cli.getEmail());
        } else {
            System.out.println("Cliente nulo.");
        }
    }

    public static void main(String[]args)throws IOException,ClassNotFoundException{
        Cliente c1 = new Cliente("Zezinho", "3354-2000", 53);
        Cliente c2 = new Cliente("Huginho", "3354-2000", 50);
        Cliente c3 = new Cliente("Luizinho", "3354-2000", 51);
        File arquivo = new File("C:\\UTFPR\\if34d\\testes\\clientes.obj");
        
        ObjectOutputStream escritor = CriaEscritorBinario(arquivo);
        EscreveObjeto(escritor, c1, false);
        EscreveObjeto(escritor, c2, false);
        EscreveObjeto(escritor, c3, true);
        
        ObjectInputStream leitor = CriaLeitorBinario(arquivo);
        Cliente c4 = (Cliente) LeObjeto(leitor);
        imprimeCliente(c4);
        Cliente c5 = (Cliente) LeObjeto(leitor);
        imprimeCliente(c5);
        Cliente c6 = (Cliente) LeObjeto(leitor);
        imprimeCliente(c6);
        Cliente c7 = (Cliente) LeObjeto(leitor);
        imprimeCliente(c7);
    }
}



//gravar
        /*
FileOutputStream escritorb = new FileOutputStream(arquivo,true);
ObjectOutputStream escritaobj = new ObjectOutputStream(escritorb);
escritaobj.writeObject(c1);
escritaobj.writeObject(c2);
escritaobj.writeObject(c3);
escritaobj.flush();
escritaobj.close();
 */



      /*
        //ler
        FileInputStream leitorb = new FileInputStream(arquivo);
        ObjectInputStream leitorobj = new ObjectInputStream(leitorb);
        Cliente cl1 = (Cliente) leitorobj.readObject();
        Cliente cl2 = (Cliente) leitorobj.readObject();
        Cliente cl3 = (Cliente) leitorobj.readObject();
        System.out.println(cl1.getNome()+" "+cl1.getFone()+" "+cl1.getIdade());
        System.out.println(cl2.getNome()+" "+cl2.getFone()+" "+cl2.getIdade());
        System.out.println(cl3.getNome()+" "+cl3.getFone()+" "+cl3.getIdade());
        leitorobj.close();
         */